package com.still.springinactionlearning.proxy;

import java.lang.reflect.Proxy;

/**
 * @program: springinactionlearninf
 * @description: 动态代理测试类
 * @author: jyxiao
 * @create: 2022-11-28 15:37
 **/
public class Client2 {
    public static void main(String[] args) {
        // 设置变量可以保存动态代理类，默认名称以 $Proxy0 格式命名
        //System.getProperties().setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");

        //创建被代理对象
        UserServiceImpl userService = new UserServiceImpl();
        //创建代理逻辑对象
        LogHandler logHandler = new LogHandler(userService);
        //生成代理对象字节码，加载字节码，生成代理对象
        UserService proxy =  (UserService)Proxy.newProxyInstance(userService.getClass().getClassLoader(),
                userService.getClass().getInterfaces(),
                logHandler);
        //使用代理对象
        proxy.select();
        proxy.update();
        // 保存JDK动态代理生成的代理类，类名保存为 UserServiceProxy
        ProxyUtils.generateClassFile(userService.getClass(), "UserServiceDynamicProxy");
    }
}
